'use strict';

module.exports = app => {
  const { DECIMAL, STRING, DATE, ENUM, INTEGER } = app.Sequelize;

  // 门店
  const Store = app.model.define('store', {
    // 名称
    name: { type: STRING },
    // 地址
    address: { type: STRING, allowNull: false },
    // 电话
    phone: STRING,
    // 经度
    longitude: DECIMAL(10, 6),
    // 纬度
    latitude: DECIMAL(10, 6),
    // 门店类型
    storeType: {
      type: ENUM,
      values: [ 'reserve', 'store' ],
      allowNull: false,
      defaultValue: 'store',
    },
    // 状态
    status: {
      type: ENUM,
      values: [ 'draft', 'published' ],
      allowNull: false,
      defaultValue: 'draft',
    },
    // 佣金比例（平台服务扣除）
    commissionRatio: {
      type: DECIMAL(5, 5),
      allowNull: false,
    },
    // 总销售额
    oveRall: {
      type: INTEGER,
      allowNull: false,
      defaultValue: 0,
    },
    // 可提现余额
    balance: {
      type: INTEGER,
      allowNull: false,
      defaultValue: 0,
    },
    // 待可用余额
    awaitBalance: {
      type: INTEGER,
      allowNull: false,
      defaultValue: 0,
    },
    // 审核时间
    auditAt: DATE,
  }, {
    paranoid: true,
  });

  Store.associate = function() {
    // 商品
    Store.hasMany(app.model.Item);
    // 管理员
    Store.belongsTo(app.model.User);
    // 主图
    Store.belongsTo(app.model.File, { as: 'image' });
    // 营业执照
    Store.belongsTo(app.model.File, { as: 'file' });
    // 服务商
    Store.belongsTo(app.model.User, { as: 'facilitator' });
    // 种类
    Store.belongsTo(app.model.StoreClass);
    // 城市
    Store.belongsTo(app.model.StoreCity);
    // 余额变动
    Store.hasOne(app.model.StoreBalanceRecord);
    // 交易
    Store.hasMany(app.model.Trade);
    // 订单
    Store.hasMany(app.model.Order);
    // 商户收入日志
    Store.hasMany(app.model.MerchantIncomeLog);
    // 订单商品
    Store.hasMany(app.model.OrderItem);
    // 商品配图
    Store.hasMany(app.model.StoreImage);
    // 被收藏的店铺
    Store.belongsToMany(app.model.User, { through: 'follow' });
  };

  return Store;
};
